#if !defined(__APP_BUFFER)
#define __APP_BUFFER

#include <pthread.h>

// 定义缓存的结构体
typedef struct
{
    char *ptr; // 缓存的指针
    int total_size; // 缓存的总大小
    int len; // 缓存中已存储数据的大小
    int offset; // 数据的起始位置的偏移量
    pthread_mutex_t lock; // 互斥锁
} Buffer;

/**
 * @brief 初始化缓存
 * @param size 缓存的总大小
 * @return 返回一个初始化好的缓存指针
 */
Buffer *app_buffer_init(int size);

/**
 * @brief 释放缓存
 * @param buffer 缓存指针
 * @return void
 */
void app_buffer_free(Buffer *buffer);

/**
 * @brief 向缓存中写入数据
 * @param buffer 缓存指针
 * @param data 要写的数据指针
 * @param len 要写的数据长度
 * @return int 成功：0, 失败：-1
 */
int app_buffer_write(Buffer *buffer, const char *data, int len);

/**
 * @brief 从缓存中读取数据
 * @param buffer 缓存指针
 * @param data 接收读取数据的容器指针
 * @param len 容器的长度
 * @return int 成功：读取到的数据长度（很可能小于len）, 失败：-1
 */
int app_buffer_read(Buffer *buffer, char *data, int len);



#endif // __APP_BUFFER
